{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基础作业——皮马印第安人糖尿病数据集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## SVM (RBF)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"diabetes.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = data['Outcome']\n",
    "remove_train_data = data.drop([\"Outcome\"], axis = 1)\n",
    "remove_train_data.sample(frac=0.8, random_state=33)\n",
    "X_train = np.array(remove_train_data)\n",
    "\n",
    "y_test = data['Outcome']\n",
    "remove_test_data = data.drop([\"Outcome\"], axis = 1)\n",
    "remove_test_data.sample(frac=0.2, random_state=33)\n",
    "X_test = np.array(remove_test_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "#数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "#初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "#分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\YuGo\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "#训练样本\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.8, random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "\n",
    "SVC1 = LinearSVC().fit(X_train_part, y_train_part)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.84      0.92      0.88       107\n",
      "          1       0.76      0.62      0.68        47\n",
      "\n",
      "avg / total       0.82      0.82      0.82       154\n",
      "\n",
      "\n",
      "Confusion matrix\n",
      "[[98  9]\n",
      " [18 29]]\n"
     ]
    }
   ],
   "source": [
    "#在效验集上测试，估计模型性能\n",
    "y_predict = SVC1.predict(X_val)\n",
    "\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\" % (SVC1, classification_report(y_val, y_predict)))\n",
    "print(\"Confusion matrix\\n%s\" % confusion_matrix(y_val, y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性SVM正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C, X_train, y_tain, X_val, y_val):\n",
    "    #利用SVC训练\n",
    "    SVC2 = LinearSVC(C=C)\n",
    "    SVC2 = SVC2.fit(X_train, y_train)\n",
    "    \n",
    "    #返回accuracy\n",
    "    accuracy = SVC2.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy:{}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy:0.8051948051948052\n",
      "accuracy:0.8311688311688312\n",
      "accuracy:0.8311688311688312\n",
      "accuracy:0.8311688311688312\n",
      "accuracy:0.8311688311688312\n",
      "accuracy:0.7597402597402597\n",
      "accuracy:0.6363636363636364\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "\n",
    "accuracy_s = []\n",
    "\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp_tain = fit_grid_point_Linear(oneC, X_train, y_train, X_val, y_val)\n",
    "    accuracy_s.append(tmp_tain)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('Basic-SVM.png' )\n",
    "\n",
    "pyplot.show()\n",
    "  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## RBF核"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 =  SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.7207792207792207\n",
      "accuracy: 0.8376623376623377\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.7207792207792207\n",
      "accuracy: 0.8246753246753247\n",
      "accuracy: 0.8311688311688312\n",
      "accuracy: 0.7207792207792207\n",
      "accuracy: 0.8246753246753247\n",
      "accuracy: 0.8181818181818182\n",
      "accuracy: 0.8116883116883117\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-1, 2, 4)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-5, -2, 4)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_val, y_val)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_Basic_SVM.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
